
import java.util.ArrayList;

public class FileDeRequetes {

    /*
     * Tableau qui sert à stoker les requêtes
     */
    private ArrayList<MessageUtile> File;


    /*
     * Constructeur
     */
    public FileDeRequetes() {
        /*
         * On crée le tableau avec comme taille par défaut 10
         */
        this.File = new ArrayList<MessageUtile>();
    }

    /*
     * Ajout d'une requête
     */
    public void ajoutRequete(MessageUtile message){
        // On ajoute
        this.File.add(message);

        // Puis on trie
        this.triFile();
    }

    /*
     * Suppression d'une requête
     */
    public void removeRequete(int i){
        this.File.remove(i);
    }

    /*
     * Recherche d'une requête en particulier
     */
    public int findRequete(int estampille, int idProcess){
        int indiceRequete = 0;

        for(int i=0;i<this.File.size();i++){
            if(this.File.get(i).getEstampille() == estampille && this.File.get(i).getIdProcess() == idProcess){
                indiceRequete = i;
            }
        }

        return indiceRequete;
    }
    /*
     * Tri de la file de requete par rapport aux estampilles ou numéros machines
     */
    public void triFile(){
        ArrayList<MessageUtile> FileCopie = new ArrayList<MessageUtile>();

        /*
         * Copie du tableau dans l'autre
         */
        for(int i=0;i<this.File.size();i++){
            FileCopie.add(this.File.get(i));
        }

        MessageUtile tamponEstamp;
        MessageUtile tamponMachine;
        boolean permut;

        /*
         * Tri du tableau par ordre croissant d'estampille ou de numéro machine
         */
        do {
            permut = false;

            for (int i = 0; i < this.File.size();i++) {
		if (this.File.get(i).getEstampille() > FileCopie.get(i+1).getEstampille()) {
			// s'ils ne le sont pas, on échange leurs positions
                	tamponEstamp = this.File.get(i);
			this.File.set(i, FileCopie.get(i+1));
			FileCopie.set(i+1, tamponEstamp);
			permut = true;
		}else if(this.File.get(i).getEstampille() == FileCopie.get(i+1).getEstampille()){
                    // Si deux estampilles sont égaux, on trie par rapport aux numéros machines
                    if(this.File.get(i).getIdProcess() > FileCopie.get(i+1).getIdProcess()){
                	tamponMachine = this.File.get(i);
			this.File.set(i, FileCopie.get(i+1));
			FileCopie.set(i+1, tamponMachine);
			permut = true;
                    }
                    // Sinon c'est dans l'ordre c'est bon
                }
            }
	} while (permut);
    }

    @Override
    public String toString() {
        return "FileDeRequetes{" + "File=" + File + '}';
    }
}